let arr = [1, 2, 3, [1, 2, [1, 2, 3, 4]]]
console.log([].concat(arr)); // [ 1, 2, 3, [ 1, 2, [ 1, 2, 3, 4 ] ] ] 因为解开数组后又拼接上[]，所以没变
console.log([].concat(...arr)); // [ 1, 2, 3, 1, 2, [ 1, 2, 3, 4 ] ] 解构arr一次，所以解开了
// 在[]后拼接会展开一层数组

console.log([].concat.apply([], arr)) // [ 1, 2, 3, 1, 2, [ 1, 2, 3, 4 ] ]
// 调用 apply 函数的过程中，会将传入的数组一个一个的传入到要执行的函数中，也就是相当对数组进行了一层的展开
